﻿#region librerías
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Librerias;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
#endregion

namespace Librerias
{
    public class ENUsuario:ENBase
    {
        #region variables
        /// <summary>
        /// Identificador único del usuario2
        /// </summary>
        private string correo;
        /// <summary>
        /// Identificador único del usuario2
        /// </summary>
        private string contraseña;
        /// <summary>
        /// Nombre único de usuario2
        /// </summary>
        private string nombre;
        /// <summary>
        /// Apellidos
        /// </summary>
        private string apellido1;
        /// <summary>
        /// Apellidos
        /// </summary>
        private string apellido2;
        /// <summary>
        /// Departamento
        /// </summary>
        private string departamento;
        /// <summary>
        /// URL del avatar del usuario2.
        /// </summary>
        private string imagen;
        /// <summary>
        /// /// 0= administrador 1=profesor 2=alumno
        /// </summary>
        /// </summary>
        private int tipo;
        /// <summary>
        /// Teléfono
        /// </summary>
        private string telefono;
        /// <summary>
        /// Correo Alternativo: por si tenemos problemas con el usuario2 de eCampus
        /// podremos recibir contraseña en esta cuenta (la de siempre)
        /// </summary>
        private string correoAlternativo;

        #endregion

        #region get set-doc
        /// <summary>
        /// Set/Get de la clase ENUsuario
        /// </summary>
       
        public string Correo
        {
            get { return correo; }
            set { correo = value; }
        }
       
        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }
        public string Apellido1
        {
            get { return apellido1; }
            set { apellido1 = value; }
        }
        public string Apellido2
        {
            get { return apellido2; }
            set { apellido2 = value; }
        }

        public string Imagen
        {
            get { return imagen; }
            set { imagen = value; }
        }
        public string Contraseña
        {
            get { return contraseña; }
            set { contraseña = value; }
        }

        public int Tipo
        {
            get { return tipo; }
            set { tipo = value; }
        }

        public string Telefono
        {
            get { return telefono; }
            set { telefono = value; }
        }

        public string Departamento
        {
            get { return departamento; }
            set { departamento = value; }
        }

        public string CorreoAlternativo
        {
            get { return correoAlternativo; }
            set { correoAlternativo = value; }
        }    
        #endregion

        #region string strTipo-doc
        /// <summary>
        /// Cadena de texto con el tipo de usuario2
        /// </summary>
        public string strTipo
        {
            get
            {
                if (tipo == 0) return "Administrador";
                else if (tipo == 1) return "Profesor";
                else return "Alumno";
            }
            set
            {
                if (value == "Administrador") tipo = 0;
                else if (value == "Profesor") tipo = 1;
                else tipo = 2;
            }
        }
        #endregion

        #region Cadena con todos los datos de la EN-doc
        /// <summary>
        /// Para hacer pruebas
        /// </summary>
        /// <returns>Cadena con todos los datos de la EN</returns>
        public override string ToString()
        {
            return Correo.ToString() + " >> " + Nombre + " >>  " + Contraseña + " >> " + Correo + " >> " + imagen;
        }
        #endregion

        #region ENUsuario()-doc
        /// <summary>
        /// Constructor por defecto de Usuario utilizado para generar objetos para casos especiales.
        /// </summary>
        public ENUsuario()
        {
            correo = string.Empty;
            correoAlternativo = string.Empty;
            nombre = string.Empty;
            apellido1 = string.Empty;
            apellido2 = string.Empty;
            departamento = string.Empty;
            imagen = "";
            Contraseña = string.Empty;
            tipo = 0;
            telefono = string.Empty;
            correoAlternativo = string.Empty;
        }
        #endregion

        #region ENUsuario(int tip)-doc
        /// <summary>
        /// Añade tipo a usuario
        /// </summary>
        /// <param name="tip">tipo: 0 admin 1 profesor 2 alumno</param>
        public ENUsuario(int tip)
        {
            tipo = tip;
        }
        #endregion

        #region Constructor Sobrecargado-doc
        /// <summary>
        /// Constructor sobrecargado
        /// </summary>
        /// <param name="uncorreo">correo</param>
        /// <param name="uncontraseña">clave</param>
        /// <param name="unnombre">nombre</param>
        /// <param name="unapellido1">apelido 1</param>
        /// <param name="unapellido2">apellido 2</param>
        /// <param name="undepartamento">depto</param>
        /// <param name="unimag">foto</param>
        /// <param name="untipo">tipo</param>
        /// <param name="untelefono">teléfono</param>
        /// <param name="uncorreoAlternativo">correo Alt</param>
        public ENUsuario(string uncorreo, string uncontraseña, string unnombre, string unapellido1, string unapellido2, string undepartamento, string unimag, int untipo, string untelefono, string uncorreoAlternativo)
        {


            nombre = unnombre;
            contraseña = uncontraseña;
            apellido1 = unapellido1;
            apellido2 = unapellido2;
            correo = uncorreo;
            imagen = unimag;
            departamento = undepartamento;
            telefono = untelefono;
            tipo = untipo;
            correoAlternativo = uncorreoAlternativo;
            /*
            //lo intentamos crear con lo que nos llega
            try
            {
                nombre = unnombre;
                contraseña = uncontraseña;
                apellido1 = unapellido1;
                apellido2 = unapellido2;
                correo = uncorreo;
                imagen = unimag;
                departamento = undepartamento;
                telefono = untelefono;
                tipo = untipo;
                correoAlternativo = uncorreoAlternativo;

                if (!EsValido())
                    throw new Exception();
            }
            //Si nos da algún problema, el crearlo, lo creamos por defecto
            catch (Exception)
            {
                correo = string.Empty;
                nombre = string.Empty;
                apellido1 = string.Empty;
                apellido2 = string.Empty;
                departamento = string.Empty;
                imagen = "Default.jpeg";
                Contraseña = string.Empty;
                tipo = 0;
                telefono = "Default";
                correoAlternativo = "Default";
                telefono = string.Empty;

            }*/
        }
        #endregion

        #region Constructor sobrecargado sin departamento-doc
        /// <summary>
        /// Constructor sobrecargado sin departamento
        /// </summary>
        /// <param name="uncorreo">correo</param>
        /// <param name="uncontraseña">clave</param>
        /// <param name="uncorreroAlt">correo alternativo</param>
        /// <param name="unnombre">nombre</param>
        /// <param name="unapellido1">apellido 1</param>
        /// <param name="unapellido2">apellido 2</param>
        /// <param name="unimag">imagen</param>
        /// <param name="untipo">tipo</param>
        /// <param name="untelefono">teléfono</param>
        public ENUsuario(string uncorreo,string uncontraseña, string uncorreroAlt, string unnombre, string unapellido1, string unapellido2, string unimag, int untipo, string untelefono)
        {
            try
            {
                correo = uncorreo;
                nombre = unnombre;
                contraseña = uncontraseña;
                correoAlternativo = uncorreroAlt;
                apellido1 = unapellido1;
                apellido2 = unapellido2;

                imagen = unimag;
                departamento = "";
                telefono = untelefono;
                tipo = untipo;
                if (!EsValido())
                    throw new Exception();
            }
            catch (Exception)
            {
                correo = string.Empty;
                correoAlternativo = string.Empty;
                nombre = string.Empty;
                apellido1 = string.Empty;
                apellido2 = string.Empty;
                departamento = string.Empty;
                imagen = "Default.jpeg";
                Contraseña = string.Empty;
                tipo = 0;
                telefono = string.Empty;
            }
        }
        #endregion

        #region Constructor sólo con un correo de usuario
        /// <summary>
        /// Constructor sólo con un correo de usuario
        /// </summary>
        /// <param name="cor">correo de usuario</param>
        public ENUsuario(string cor)
        {
            correo = cor;
            correoAlternativo = string.Empty;
            nombre = string.Empty;
            apellido1 = string.Empty;
            apellido2 = string.Empty;
            departamento = string.Empty;
            imagen = string.Empty;
            Contraseña = string.Empty;
            tipo = 0;
            telefono = string.Empty;
        }
        #endregion

        #region EsValido-doc
        /// <summary>
        /// Función para comprobar si los datos de un usuario2 son válidos
        /// </summary>
        /// <returns>True si es valido, False si no lo es</returns>
        public bool EsValido()
        {
            return (correo != "" && nombre != "" && apellido1 != "" && apellido2 != "" && (tipo == 0 || tipo == 1 || tipo == 2));
        }
        #endregion

        
        #region llamadas cads-doc


        #region llamada a CAD descargar imagen desde Dropbox-doc
        /// <summary>
        /// llamada a CAD descargar imagen desde Dropbox
        /// </summary>
        /// <param name="correoUsuario">Correo usuario</param>
        /// <param name="rutaDescarga">Dónde la queremos descargar</param>
        public void DescargarImagen(string correoUsuario, string rutaDescarga)
        {
            new CADUsuario().DescargarImagen(correoUsuario, rutaDescarga);
        }
        #endregion

        #region CrearUsuario()-doc
        /// <summary>
        /// llamada a cad: la en que lo llame se persiste
        /// </summary>
        /// <param name="barra">Para la subida de imagen a dropbox</param>
        public void CrearUsuario(ProgressBar barra = null)
        {
            CADUsuario cad = new CADUsuario();
            cad.CrearUsuario(this,barra);
        }
        #endregion

        #region CrearUsuarioAdminEstu()-doc
        /// <summary>
        /// PAra persistir usuario: admin o alumno
        /// </summary>
        public void  CrearUsuarioAdminEstu()
        {
            CADUsuario cad = new CADUsuario();
            cad.CrearUsuarioAdminEstu(this);
        }
        #endregion

        #region BorrarUsuario()-doc
        /// <summary>
        /// llamada a cad Borra usuario
        /// </summary>
        public void BorrarUsuario()
        {
            CADUsuario cad = new CADUsuario();
            cad.BorrarUsuario(this);
        }
        #endregion

        #region ModificarUsuario()-doc
        /// <summary>
        /// Llamada a cad que persiste las modificaciones del usuario que lo llama
        /// </summary>
        /// <param name="barra">Para subida a dropbox de imagen</param>
        public void ModificarUsuario(ProgressBar barra = null)
        {   
            CADUsuario cad = new CADUsuario();
            cad.ModificarUsuario(this,barra);
        }

        #endregion

        #region ModificarUsuarioAdminEstu().doc
        /// <summary>
        /// llamada a cad modifica con persistencia: admin o estudiante
        /// </summary>
        public void ModificarUsuarioAdminEstu()
        {
            CADUsuario cad = new CADUsuario();
            cad.ModificarUsuarioAdminEstu(this);
        }
        #endregion

        #region ModificarClave-doc
        /// <summary>
        /// llamada a cad: Cambiará la clave de un usuario
        /// </summary>
        /// <param name="CorreoUsuario">correo</param>
        /// <param name="ClaveNueva">clave nueva</param>
        public void ModificarClave(string CorreoUsuario, string ClaveNueva)
        {
            CADUsuario cad = new CADUsuario();
            cad.ModificarClave(CorreoUsuario, ClaveNueva);
        }
        #endregion

        #region Modifica un teléfono-doc
        /// <summary>
        /// Modifica un teléfono
        /// </summary>
        /// <param name="CorreoUsuario">correo</param>
        /// <param name="nuevoTelefono">nuevo teléfono</param>
        public void ModificarTelefono(string CorreoUsuario, string nuevoTelefono)
        {
            CADUsuario cad = new CADUsuario();
            cad.ModificarTelefono(CorreoUsuario, nuevoTelefono);
        }
        #endregion

        #region Modifica un Correo-alt-doc
        /// <summary>
        /// Modifica Correo Alt
        /// </summary>
        /// <param name="CorreoUsuario">correo</param>
        /// <param name="nuevoCorreoAlternativo">nuevo Correo Alt</param>
        public void ModificarCorreoAlt(string CorreoUsuario, string nuevoCorreoAlternativo)
        {
            CADUsuario cad = new CADUsuario();
            cad.ModificarCorreoAlt(CorreoUsuario, nuevoCorreoAlternativo);
        }
        #endregion

        #region Modifica imagen de usuario-doc-deprecado-no-usar
        /// <summary>
        /// Modifica imagen de usuario: Deprecado no usar
        /// </summary>
        /// <param name="UsuarioCorreo">correo</param>
        /// <param name="nuevaImagen">nueva imagen</param>
        public void ModificarImgen(string UsuarioCorreo, Image nuevaImagen)
        {
            CADUsuario cad = new CADUsuario();
            cad.ModificarImagen(UsuarioCorreo, nuevaImagen);
        }
        #endregion

        #region Nos devuelve usuarios-doc
        /// <summary>
        /// Nos devuelve usuarios
        /// </summary>
        /// <returns>DataTable con usuarios</returns>
        public DataTable ConsultaUsuario()
        {
            CADUsuario cad = new CADUsuario();
            return cad.ConsultaUsuarios();
        }
        #endregion

        #region Consulta usuarios segun una cadena, y un tipo-doc
        /// <summary>
        /// Consulta usuarios segun una cadena, y un tipo
        /// </summary>
        /// <param name="cadena">cadena a buscar</param>
        /// <param name="tipo">tipo</param>
        /// <returns>DataTable con los encontrados</returns>
        public DataTable ConsultaUsuario(string cadena, int tipo)
        {
            CADUsuario cad = new CADUsuario();
        
            return cad.ConsultaUsuarios(cadena, tipo);
        }
        #endregion

        #region BuscarCorreo(string correoUsuario)-doc
        /// <summary>
        /// Nos dirá si existe un usuario correo
        /// </summary>
        /// <param name="correo">Correo a buscar</param>
        /// <returns>V si Existe F sino</returns>
        public bool BuscarCorreo(string correo)
        {
           bool encontrado = false;
            CADUsuario cad = new CADUsuario();
            if (cad.BuscarCorreo(correo))
                encontrado = true;
            return encontrado;
        }
        #endregion

        #region BuscarCorreoTurno(string correo)-doc
        /// <summary>
        /// Nos dirá si un Usuario (correo) está en un turno
        /// </summary>
        /// <param name="correo">Correo</param>
        /// <returns>V si está o F en caso contrario</returns>
        public bool BuscarCorreoTurno(string correo)
        {
            bool encontrado = false;
            CADUsuario cad = new CADUsuario();
            if (cad.BuscarCorreoTurno(correo))
                encontrado = true;
            return encontrado;
        }
        #endregion

        #region BuscarCorreoCursar(string correo)
        /// <summary>
        /// Nos dirá si un usuario estça en Cursar
        /// </summary>
        /// <param name="correo">Correo</param>
        /// <returns>V si está F en caso contrario</returns>
        public bool BuscarCorreoCursar(string correo)
        {
            bool encontrado = false;
            CADUsuario cad = new CADUsuario();
            if (cad.BuscarCorreoCursar(correo))
                encontrado = true;
            return encontrado;
        }
        #endregion

        #region consulta usuario por asignatura y tipo-doc
        /// <summary>
        /// consulta usuario por asignatura y tipo
        /// </summary>
        /// <param name="codigoAsignatura">cód asigna</param>
        /// <param name="tipoUsu">tipo usuario</param>
        /// <returns></returns>
        public DataTable ConsultarUsuariosPorTipoUsuYAsignatura(String codigoAsignatura, int tipoUsu)
        {
            CADUsuario cad = new CADUsuario();
            return cad.ConsultarUsuariosPorTipoUsuYAsignatura(codigoAsignatura, tipoUsu);
        }
        #endregion

        #region ConsultarProfesoresPorDepartamento-doc
        /// <summary>
        /// ConsultarProfesoresPorDepartamento
        /// </summary>
        /// <param name="codigoDepartamento">cód Depto</param>
        /// <returns>Datatable con los datos</returns>
        public DataTable ConsultarProfesoresPorDepartamento(String codigoDepartamento)
        {
            CADUsuario cad = new CADUsuario();
            return cad.ConsultarProfesoresPorDepartamento(codigoDepartamento);
        }
        #endregion

        /// <summary>
        /// Dado el par correoAlter y Teléfono nos dirá si es V
        /// </summary>
        /// <param name="correoAlter">correo alternativo</param>
        /// <param name="telefono">teléfono del usuario</param>
        /// <returns></returns>
        public bool SMSAlternativaYTelefono(string correoAlter, string telefono)
        {
            bool salida;
            salida = new CADUsuario().SMSAlternativaYTelefono(correoAlter, telefono);
            return salida;
        }

        #region código ernesto
        #region EsClaveValidaAdministrador
        /// <summary>
        /// Si le damos correo Administrador y una posible Clave no dice si V
        /// </summary>
        /// <param name="correoAdministrador">correo admin</param>
        /// <param name="posibleClave">posible clave</param>
        /// <returns>V si es cierto F en caso contrario</returns>
        public bool EsClaveValidaAdministrador(string correoAdministrador, string posibleClave) ////Acesso conectado
            {
                bool salida = false;
                CADUsuario usuarioCriado = new CADUsuario();

                salida = usuarioCriado.EsClaveValidaAdministrador(correoAdministrador, posibleClave);

                return salida;    
            }
        #endregion

        #region EsClaveValidaProfesor
        /// <summary>
        /// Nos dirá si es clave válida de profesor
        /// </summary>
        /// <param name="correoProfesor">correo profesor</param>
        /// <param name="posibleClave">posible clave</param>
        /// <returns>V si es su clave F si no</returns>
            public bool EsClaveValidaProfesor(string correoProfesor, string posibleClave) ////Acesso conectado
            {
                bool salida = false;
                CADUsuario usuarioCriado = new CADUsuario();

                salida = usuarioCriado.EsClaveValidaProfesor(correoProfesor, posibleClave);

                return salida;
            }
        #endregion

        #region EsClaveValidaAlumno
        /// <summary>
        /// Nos dice si dado un alumno y una clave es la suya
        /// </summary>
        /// <param name="correoAlumno">correo alumno</param>
        /// <param name="posibleClave">clave a comprobar</param>
        /// <returns></returns>
        public bool EsClaveValidaAlumno(string correoAlumno, string posibleClave) ////Acesso conectado
        {
                bool salida = false;
                CADUsuario usuarioCriado = new CADUsuario();

                salida = usuarioCriado.EsClaveValidaAlumno(correoAlumno, posibleClave);

                return salida;
        }
        #endregion

        #region dimeUsuarioSegunCorreo
        /// <summary>
        /// Nos dice usuario según correo
        /// </summary>
        /// <param name="correito">correo usuario que queremos saber</param>
        /// <returns>DataTable con él</returns>
        public DataTable dimeUsuarioSegunCorreo(string correito)
        {
            DataTable salida = new DataTable();
            CADUsuario criado = new CADUsuario();

            salida = criado.dimeUsuarioSegunCorreo(correito);

            return salida;    
        }
        #endregion

        #region UsuarioSabeSuCorreoAlternativo
        /// <summary>
        /// Nos informa de si un usuario sabe su correo alternativo
        /// </summary>
        /// <param name="correoUsuario">correo usuario</param>
        /// <param name="correoAlternativo">correo Alternativo</param>
        /// <returns>Si la sabe o si no</returns>
        public bool UsuarioSabeSuCorreoAlternativo(string correoUsuario, string correoAlternativo)//conectado
        {
            bool salida = false;
            CADUsuario usuarioCriado = new CADUsuario();

            salida = usuarioCriado.UsuarioSabeSuCorreoAlternativo(correoUsuario, correoAlternativo);

            return salida;
        }
        #endregion

        #region refrescaMemoriaMedianteCorreoAlternativo
        /// <summary>
        /// Nos refrescará la memoria mediante Correo Alternativo
        /// </summary>
        /// <param name="usuario">usuario</param>
        /// <returns>DataTable con los datos</returns>
        public DataTable refrecaMemoriaMedianteCorreoAlternativo(string usuario)
        {
            DataTable salida = new DataTable();
            CADUsuario criado = new CADUsuario();

            salida = criado.refrecaMemoriaMedianteCorreoAlternativo(usuario);

            return salida;    
        }
        #endregion

        /// <summary>
        /// Nos dirá usuario según su correo alternativo
        /// </summary>
        /// <param name="correitoAlternativo">correo alternativo</param>
        /// <returns></returns>
        public DataTable dimeUsuarioSegunCorreoAlternativo(string correitoAlternativo)
        {
            DataTable salida = new DataTable();
            CADUsuario criado = new CADUsuario();

            salida = criado.dimeUsuarioSegunCorreoAlternativo(correitoAlternativo);

            return salida;    
        }

        #endregion

        #endregion

        #region CódigoBasura
        /*
        #region Constructor sin correoUsuario
        /// <summary>
        /// Constructor sin correoUsuario
        /// </summary>
        public ENUsuario(string uncontraseña, string unnombre, string unapellido1, string unapellido2, string undepartamento, string unimag, int untipo, string untelefono)
        {
            try
            {

                nombre = unnombre;
                contraseña = uncontraseña;
                apellido1 = unapellido1;
                apellido2 = unapellido2;

                imagen = unimag;
                departamento = undepartamento;
                telefono = untelefono;
                tipo = untipo;
                if (!EsValido())
                    throw new Exception();
            }
            catch (Exception ex)
            {
                nombre = "Default";
                apellido1 = "Defautlt";
                apellido2 = "Defautlt";
                departamento = "Default";
                imagen = "Default.jpeg";
                Contraseña = "";
                tipo = 0;
                telefono = "Default";

            }
        }
        #endregion
        */

        /// <summary>
        /// Constructor sin correoUsuario
        /// </summary>
        /*public ENUsuario(string uncontraseña,string uncorreroAlt, string unnombre, string unapellido1, string unapellido2, string undepartamento, string unimag, int untipo, string untelefono)
       {
           try
           {

               nombre = unnombre;
               contraseña = uncontraseña;
               correoAlternativo = uncorreroAlt;
               apellido1 = unapellido1;
               apellido2 = unapellido2;

               imagen = unimag;
               departamento = undepartamento;
               telefono = untelefono;
               tipo = untipo;
               if (!EsValido())
                   throw new Exception();
           }
           catch (Exception ex)
           {
               correoUsuario = string.Empty;
               correoAlternativo = string.Empty;
               nombre = string.Empty;
               apellido1 = string.Empty;
               apellido2 = string.Empty;
               departamento = string.Empty;
               imagen = "Default.jpeg";
               Contraseña = string.Empty;
               tipo = 0;
               telefono = string.Empty;

           }
       }*/

        /*     #region ConsultaUsuarioBusqueda(ref DataSet DS, ref int filas)
     public void ConsultaUsuarioBusqueda(ref DataSet DS, ref int filas)
      {
          CADUsuario cad = new CADUsuario();
          cad.ConsultaUsuarioBusqueda(ref DS, ref filas, this);
      }
      #endregion*/
        #endregion



        public bool  Validar()
        {
            return new CADUsuario().ComprobarLogin(correo, contraseña);
        }

        public int GetTipo(string nomUsuario)
        {
            return new CADUsuario().GetTipo(nomUsuario);
        }
        
        public DataTable MiRed(string usuario, int tipo)
        {
            return new CADUsuario().MiRed(usuario, tipo);
        }

        public DataTable MiRedBuscar(string correoUsu, int tipoUsu, string busqueda)
        {
            return new CADUsuario().MiRedBuscar(correoUsu, tipoUsu, busqueda);
        }

        public void SetTelefonoYCorreoAlternativo(string usu, string telefono, string correo2)
        {
            new CADUsuario().SetTelefonoYCorreoAlternativo(usu,telefono,correo2);
        }
        
        public void SetTelefonoYCorreoAlternativoYClave(string usu, string telefono, string correo2, string clave)
        {
            new CADUsuario().SetTelefonoYCorreoAlternativoYClave(usu, telefono, correo2,clave);
        }

        public void SetImagen(string usu, string imagen)
        {
            new CADUsuario().SetImagen(usu, imagen);
        }

        public DataTable AsignaturasComunes(string correo1, string correo2)
        {
           return new CADUsuario().AsignaturasComunes(correo1, correo2);
        }
    }
}
